iT邦幫忙

2025 iThome 鐵人賽

DAY 28
0
生成式 AI

一起來打造 PTT 文章智慧問答系統!系列 第 28

【Day 28】系統效能壓測與瓶頸分析 - 找到成本與效能的平衡點

  • 分享至 

  • xImage
  •  

Hi大家好,
這是我參加 iT 邦幫忙鐵人賽的第 1 次挑戰,這次的主題聚焦在結合 Python 爬蟲、RAG(檢索增強生成)與 AI,打造一套 PTT 文章智慧問答系統。在過程中,我會依照每天進度上傳程式碼到 GitHub ,方便大家參考學習。也歡迎留言或來信討論,我的信箱是 gerryearth@gmail.com


昨天我們探討了 系統監控與日誌分析,了解如何追蹤系統的健康狀態。
今天,我們要更進一步,討論 如何進行效能壓測(Load Testing),並透過結果找到 系統瓶頸,以便提前優化。

對於一個 RAG 系統來說,最常見的問題是:

  • 當使用者同時查詢時,系統還能撐住嗎?
  • LLM API 或向量檢索會不會成為瓶頸?
  • 要如何估算成本與效能的平衡點?

今日目標

  • 認識效能壓測的核心概念
  • 瞭解 RAG 系統可能出現的瓶頸
  • 學習常見的壓測工具與分析方法

什麼是效能壓測?

效能壓測主要包含以下幾種類型:

  1. Load Testing(負載測試)
    模擬多個使用者同時查詢,檢測系統能否應付「日常高峰流量」。

  2. Stress Testing(壓力測試)
    持續增加流量,直到系統崩潰,找出極限。

  3. Spike Testing(突發測試)
    突然增加大量流量,觀察系統是否能快速恢復。

  4. Endurance Testing(長時間測試)
    模擬系統連續運行數小時甚至數天,觀察記憶體洩漏或效能下降。


RAG 系統的潛在瓶頸

我們的 PTT RAG 問答系統包含三個核心模組:

  1. Django API

    • 瓶頸:同時請求數量太多 → 連線數不足、Thread Pool 壓力大
    • 解法:增加快取、調整 Gunicorn/Uvicorn worker 數量
  2. 向量檢索(Pinecone / FAISS)

    • 瓶頸:查詢延遲(特別是 Top K 很大時)
    • 解法:降低 K 值、優化索引方式、使用更快的儲存方案
  3. LLM 回答生成(Gemini, GPT, Claude)

    • 瓶頸:API 回應延遲、Token 成本過高

    • 解法:

      • Prompt 優化(減少輸入字數)
      • 使用較便宜的模型處理簡單問題
      • 只在需要時才呼叫 LLM(例如:檢索結果不足時)

壓測工具推薦

以下是常用的壓測工具:

  • Apache JMeter

    • GUI 操作方便,適合模擬複雜流程(登入、查詢、回應)。
  • Locust

    • Python 撰寫測試腳本,能模擬使用者行為,非常靈活。
  • k6

    • 輕量、支援 JavaScript 腳本,適合雲端服務壓測。

範例:用 Locust 測試 RAG API

from locust import HttpUser, task, between

class RAGUser(HttpUser):
    wait_time = between(1, 5)  # 模擬使用者每 1~5 秒送一次請求

    @task
    def ask_question(self):
        self.client.post(
            "/api/query/",
            json={"question": "今天 PTT Gossiping 熱門話題是什麼?"}
        )

啟動 Locust 之後,可以設定:

  • 同時模擬 100 個使用者
  • 每秒送出 50 個請求
  • 持續壓測 10 分鐘

就能觀察:

  • API 平均回應時間(p95, p99 latency)
  • 請求成功率
  • 系統是否出現 Timeout 或錯誤

瓶頸分析方法

  1. 觀察延遲來源

    • API → 延遲主要來自 LLM 或 DB?
    • 使用 Django logging 記錄每個模組耗時。
  2. 監控系統資源

    • CPU / 記憶體 → 是否滿載?
    • I/O → 向量檢索是否造成 Disk 或 Network 壓力?
  3. 定位最慢環節

    • 如果 LLM 回應平均要 3 秒 → 可以先快取常見問題。
    • 如果檢索耗時超過 1 秒 → 需要調整 Index 或分片策略。

結論

  • RAG 系統的效能瓶頸通常出現在 LLM 回答向量檢索
  • 壓測能幫助我們在上線前找到極限,避免使用者流量一來就崩潰。
  • 建議先用 Locust 進行基本壓測,再搭配 監控工具(Grafana + Prometheus),完整追蹤效能。

明天【Day 29】使用者體驗與回饋機制 - 改善用戶體驗,我們來看看如何讓系統更貼近真實使用情境,而不只是技術上的實作。


上一篇
【Day 27】系統監控與日誌分析 - 追蹤系統的健康狀態
下一篇
【Day 29】使用者體驗與回饋機制 - 改善用戶體驗
系列文
一起來打造 PTT 文章智慧問答系統!30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言